/* 规定:
(1)服务号 命令号 不能为0
(2)服务号与命令号大小不能超过2个字节的整数;
(3) buf协议里面2个字节来存放服务号(0开始的2个字节)，命令号(1开始的2个字节);
(4) 加密,解密, 
(5) 服务号命令号二进制中都用小尾存储
(6) 所有的文本，都使用utf8
*/
const log = require("../utils/log.js");
const netbus = require("./netbus.js");

function json_encode(stype, ctype, body) {
	var cmd = {};
	cmd[0] = stype;
	cmd[1] = ctype;
	cmd[2] = body;

	var str = JSON.stringify(cmd);
	return str;
}

function json_decode(cmd_json) {
	var cmd = JSON.parse(cmd_json);
	if (!cmd || 
		typeof(cmd[0])=="undefined" ||
		typeof(cmd[1])=="undefined" ||
		typeof(cmd[2])=="undefined") {
		return null;
	}

	return cmd;
}

/**
 * 加密
 * @param {*} stype 服务类型 
 * @param {*} ctype 命令号;
 * @param {*} body  数据内容
 */
function encode_cmd(stype, ctype, body) {
	let buf = null;	
	buf = json_encode(stype, ctype, body);
	return buf;
}

/**
 * 解密 返回: {0: stype, 1, ctype, 2: body}
 * @param {*} str_or_buf 接受到的数据命令
 */
function decode_cmd(str_or_buf) {
	return json_decode(str_or_buf);
}

proto_man.encode_cmd = encode_cmd;
proto_man.decode_cmd = decode_cmd;

module.exports = proto_man;